<!DOCTYPE html>
<!--文件类型-->

<html>

<head>
    <!-- Standard Meta -->
    <meta charset="UTF-8">

    <!--网页标题（显示在浏览器标题栏中改网页的标签页）-->
    <title>【资料】C语言标准库及库函数 - BitBitcode</title>
    <!--标题栏图标-->
    <link rel="icon" href="..\images\Logo.png" type="image/x-icon">
    <!--收藏夹图标-->
    <link rel="shortcut icon" href="..\images\Logo.png" type="image/x-icon">


    <!--调用 CSS 样式文件-->
    <link href="..\CSS_files\semantic.css" rel="stylesheet" type="text/css">
    <link href="..\CSS_files\article.css" rel="stylesheet" type="text/css">
    <!--   
    <link href="..\CSS_files\vue.css" rel="stylesheet" type="text/css"> -->



    <!--调用 JavaScript 文件-->
    <!--注意：“jquery-3.1.1.js”和“semantic.js”的调用顺序不能变！！！-->
    <script src="..\JavaScript_files\jquery-3.1.1.js"> </script>
    <script src="..\JavaScript_files\semantic.js"> </script>


    <!--含有JavaScript效果组件还需要单独调用-->
    <script>
        $(document)
            .ready(function () {
                $('.ui.menu .ui.dropdown')
                    .dropdown({
                        on: 'hover'
                    });
                $('.ui.menu a.item')
                    .on('click', function () {
                        $(this)
                            .addClass('active')
                            .siblings()
                            .removeClass('active')
                            ;
                    })
                    ;
            })
            ;
    </script>


    <!--内部样式定义-->
    <style>
        body {
            padding: 0em;
        }

        .ui.menu {
            margin: 0em 0em;
        }

        .ui.menu:last-child {
            margin-bottom: 110px;
        }
    </style>
</head>


<body>
    <!--全页面背景-->
    <div class="background"> </div>


    <!--页眉与导航栏（开始）-->
    <div class="ui inverted grey fixed menu" style="padding-right: 10%; padding-left: 10%;">
        <!--单项菜单-->
        <div class="header item">BitBitcode</div>
        <a class="item" href="..\index.html"> 首 页 </a>
        <a class="active item" href="..\(0)Menu_Pages\(1)C_and_C++.html"> C/C++ </a>
        <a class="item" href="..\(0)Menu_Pages\(2)CMD.html"> CMD </a>
        <a class="item" href="..\(0)Menu_Pages\(3)Python.html"> Python </a>
        <a class="item" href="..\(0)Menu_Pages\(4)Articles.html"> 文 章 </a>

        <!--下拉菜单-->
        <div tabindex="0" class="ui dropdown item">
            更 多
            <i class="dropdown icon"></i>
            <div tabindex="-1" class="menu transition hidden">
                <a class="item" href="sentence.html"> 有趣的话 </a>
                <a class="item" href="lyric.html"> 歌词分享 </a>
                <a class="item" href="wallpaper.html"> 壁纸分享 </a>
                <div class="divider"></div>
                <a class="item" href="..\(0)Menu_Pages\(5)Others.html">其 他</a>
                <div class="divider"></div>
                <a class="item" href="..\README.md">关于本站</a>
            </div>
        </div>

        <!--右边搜索栏和链接-->
        <div class="right menu">
            <div class="item">
                <div class="ui transparent inverted icon input">
                    <input type="text" placeholder="搜索功能还未上线">
                    <button class="ui grey icon button"><i class="search icon"></i></button>
                </div>
            </div>
            <a class="item" href="http://github.com/BitBitcode"><i class="github icon"></i> 我的GitHub</a>
        </div>
    </div>
    <!--页眉与导航栏（结束）-->


    <!--正文部分（开始）-->
    <div class="MFD_Light_Content">
        
        <article class='typora-export os-windows' >
            <div  id='write'  class = 'is-node'><h1><a name="c语言标准库及库函数" class="md-header-anchor"></a><span>【资料】C语言标准库及库函数</span></h1><h2><a name="什么是库" class="md-header-anchor"></a><span>什么是库?</span></h2><p><span>人们将具有某类功能的函数写好后放入一个或几个文件中封装起来，供其他人调用</span></p><h2><a name="什么是标准库" class="md-header-anchor"></a><span>什么是标准库？</span></h2><h2><a name="什么是第三方库" class="md-header-anchor"></a><span>什么是第三方库？</span></h2><h2><a name="c标准库有哪些" class="md-header-anchor"></a><span>C标准库有哪些？</span></h2><p><span>C语言在“ANSI C 标准”中规定的一组 C 内置函数、常量和头文件，比如 &lt;stdio.h&gt;、&lt;stdlib.h&gt;、&lt;math.h&gt;，等等。C语言一共有15个标准库（即标准头文件）。事实上初学者不需要每个都去掌握，重点掌握 math.h、stdio.h、string.h 即可。其他库/函数在需要的时候再去查阅学习。</span></p><figure><table><thead><tr><th style='text-align:center;' ><span>序号</span></th><th style='text-align:center;' ><span>标准库</span></th><th style='text-align:center;' ><span>作用</span></th></tr></thead><tbody><tr><td style='text-align:center;' ><span>1</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-assert-h.html'><span>assert.h</span></a></td><td style='text-align:center;' ><span>用于验证程序做出的假设，并在假设为假时输出诊断消息</span></td></tr><tr><td style='text-align:center;' ><span>2</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-ctype-h.html'><span>ctype.h</span></a></td><td style='text-align:center;' ><span>提供了一些函数，可用于测试和映射字符</span></td></tr><tr><td style='text-align:center;' ><span>3</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-errno-h.html'><span>errno.h</span></a></td><td style='text-align:center;' ><span>定义了一系列表示不同错误代码的宏</span></td></tr><tr><td style='text-align:center;' ><span>4</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-float-h.html'><span>float.h</span></a></td><td style='text-align:center;' ><span>包含了一组与浮点值相关的依赖于平台的常量</span></td></tr><tr><td style='text-align:center;' ><span>5</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-limits-h.html'><span>limits.h</span></a></td><td style='text-align:center;' ><span>决定了各种变量类型的各种属性</span></td></tr><tr><td style='text-align:center;' ><span>6</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-locale-h.html'><span>locale.h</span></a></td><td style='text-align:center;' ><span>定义了特定地域的设置，比如日期格式和货币符号</span></td></tr><tr><td style='text-align:center;' ><span>7</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-math-h.html'><span>math.h</span></a></td><td style='text-align:center;' ><span>定义了各种数学函数和一个宏</span></td></tr><tr><td style='text-align:center;' ><span>8</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-setjmp-h.html'><span>setjmp.h</span></a></td><td style='text-align:center;' ><span>定义了宏 </span><strong><span>setjmp()</span></strong><span>、函数 </span><strong><span>longjmp()</span></strong><span> 和变量类型 </span><strong><span>jmp_buf</span></strong></td></tr><tr><td style='text-align:center;' ><span>9</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-signal-h.html'><span>signal.h</span></a></td><td style='text-align:center;' ><span>处理程序执行期间报告的不同信号</span></td></tr><tr><td style='text-align:center;' ><span>10</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html'><span>stdarg.h</span></a></td><td style='text-align:center;' ><span>定义了一个变量类型 </span><strong><span>va_list</span></strong><span> 和三个宏</span></td></tr><tr><td style='text-align:center;' ><span>11</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-stddef-h.html'><span>stddef.h</span></a></td><td style='text-align:center;' ><span>定义了各种变量类型和宏</span></td></tr><tr><td style='text-align:center;' ><span>12</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-stdio-h.html'><span>stdio.h</span></a></td><td style='text-align:center;' ><span>执行输入和输出</span></td></tr><tr><td style='text-align:center;' ><span>13</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-stdlib-h.html'><span>stdlib.h</span></a></td><td style='text-align:center;' ><span>定义了四个变量类型、一些宏和各种通用工具函数</span></td></tr><tr><td style='text-align:center;' ><span>14</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-string-h.html'><span>string.h</span></a></td><td style='text-align:center;' ><span>操作字符数组的函数</span></td></tr><tr><td style='text-align:center;' ><span>15</span></td><td style='text-align:center;' ><a href='https://www.runoob.com/cprogramming/c-standard-library-time-h.html'><span>time.h</span></a></td><td style='text-align:center;' ><span>定义了四个变量类型、两个宏和各种操作日期和时间的函数</span></td></tr></tbody></table></figure><h2><a name="c标准库中的函数宏" class="md-header-anchor"></a><span>C标准库中的函数/宏</span></h2><h3><a name="1asserth" class="md-header-anchor"></a><span>1、&lt;assert.h&gt;</span></h3><h4><a name="简介" class="md-header-anchor"></a><span>简介</span></h4><p><span>C 标准库的 </span><strong><span>assert.h</span></strong><span>头文件提供了一个名为 </span><strong><span>assert</span></strong><span> 的宏，它可用于验证程序做出的假设，并在假设为假时输出诊断消息。</span></p><p><span>已定义的宏 </span><strong><span>assert</span></strong><span> 指向另一个宏 </span><strong><span>NDEBUG</span></strong><span>，宏 </span><strong><span>NDEBUG</span></strong><span> 不是 &lt;assert.h&gt; 的一部分。如果已在引用 &lt;assert.h&gt; 的源文件中定义 NDEBUG 为宏名称，则 </span><strong><span>assert</span></strong><span> 宏的定义如下：</span></p><pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="c"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="c"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 37px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 25px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre><div class="CodeMirror-linenumber CodeMirror-gutter-elt"><div>1</div></div></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -25px; width: 25px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -25px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 17px;">1</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#define assert(ignore) ((void)0)</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 20px;"></div><div class="CodeMirror-gutters" style="height: 20px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 25px;"></div></div></div></div></pre><h4><a name="库宏" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面列出了头文件 assert.h 中定义的唯一的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-assert.html'><span>void assert(int expression)</span></a><span> 这实际上是一个宏，不是一个函数，可用于在 C 程序中添加诊断。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="2ctypeh" class="md-header-anchor"></a><span>2、&lt;ctype.h&gt;</span></h3><h4><a name="简介-n3359" class="md-header-anchor"></a><span>简介</span></h4><p><span>C 标准库的 </span><strong><span>ctype.h</span></strong><span> 头文件提供了一些函数，可用于测试和映射字符。</span></p><p><span>这些函数接受 </span><strong><span>int</span></strong><span> 作为参数，它的值必须是 EOF 或表示为一个无符号字符。</span></p><p><span>如果参数 c 满足描述的条件，则这些函数返回非零（true）。如果参数 c 不满足描述的条件，则这些函数返回零。</span></p><h4><a name="库函数" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面列出了头文件 ctype.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:center;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:center;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isalnum.html'><span>int isalnum(int c)</span></a><span> 该函数检查所传的字符是否是字母和数字。</span></td></tr><tr><td style='text-align:center;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isalpha.html'><span>int isalpha(int c)</span></a><span> 该函数检查所传的字符是否是字母。</span></td></tr><tr><td style='text-align:center;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-iscntrl.html'><span>int iscntrl(int c)</span></a><span> 该函数检查所传的字符是否是控制字符。</span></td></tr><tr><td style='text-align:center;' ><span>4</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isdigit.html'><span>int isdigit(int c)</span></a><span> 该函数检查所传的字符是否是十进制数字。</span></td></tr><tr><td style='text-align:center;' ><span>5</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isgraph.html'><span>int isgraph(int c)</span></a><span> 该函数检查所传的字符是否有图形表示法。</span></td></tr><tr><td style='text-align:center;' ><span>6</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-islower.html'><span>int islower(int c)</span></a><span> 该函数检查所传的字符是否是小写字母。</span></td></tr><tr><td style='text-align:center;' ><span>7</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isprint.html'><span>int isprint(int c)</span></a><span> 该函数检查所传的字符是否是可打印的。</span></td></tr><tr><td style='text-align:center;' ><span>8</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ispunct.html'><span>int ispunct(int c)</span></a><span> 该函数检查所传的字符是否是标点符号字符。</span></td></tr><tr><td style='text-align:center;' ><span>9</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isspace.html'><span>int isspace(int c)</span></a><span> 该函数检查所传的字符是否是空白字符。</span></td></tr><tr><td style='text-align:center;' ><span>10</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isupper.html'><span>int isupper(int c)</span></a><span> 该函数检查所传的字符是否是大写字母。</span></td></tr><tr><td style='text-align:center;' ><span>11</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-isxdigit.html'><span>int isxdigit(int c)</span></a><span> 该函数检查所传的字符是否是十六进制数字。</span></td></tr></tbody></table></figure><p><span>标准库还包含了两个转换函数，它们接受并返回一个 &quot;int&quot;</span></p><figure><table><thead><tr><th style='text-align:center;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:center;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-tolower.html'><span>int tolower(int c)</span></a><span> 该函数把大写字母转换为小写字母。</span></td></tr><tr><td style='text-align:center;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-toupper.html'><span>int toupper(int c)</span></a><span> 该函数把小写字母转换为大写字母。</span></td></tr></tbody></table></figure><h4><a name="字符类" class="md-header-anchor"></a><span>字符类</span></h4><figure><table><thead><tr><th style='text-align:center;' ><span>序号</span></th><th style='text-align:left;' ><span>字符类 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:center;' ><span>1</span></td><td style='text-align:left;' ><strong><span>数字</span></strong><span> 完整的数字集合 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }</span></td></tr><tr><td style='text-align:center;' ><span>2</span></td><td style='text-align:left;' ><strong><span>十六进制数字</span></strong><span> 集合 { 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f }</span></td></tr><tr><td style='text-align:center;' ><span>3</span></td><td style='text-align:left;' ><strong><span>小写字母</span></strong><span> 集合 { a b c d e f g h i j k l m n o p q r s t u v w x y z }</span></td></tr><tr><td style='text-align:center;' ><span>4</span></td><td style='text-align:left;' ><strong><span>大写字母</span></strong><span> 集合 {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }</span></td></tr><tr><td style='text-align:center;' ><span>5</span></td><td style='text-align:left;' ><strong><span>字母</span></strong><span> 小写字母和大写字母的集合</span></td></tr><tr><td style='text-align:center;' ><span>6</span></td><td style='text-align:left;' ><strong><span>字母数字字符</span></strong><span> 数字、小写字母和大写字母的集合</span></td></tr><tr><td style='text-align:center;' ><span>7</span></td><td style='text-align:left;' ><strong><span>标点符号字符</span></strong><span> 集合 ! &quot; # $ % &amp; &#39; ( ) * + , - . / : ; &lt; = &gt; ? @ [ \ ] ^ _ ` { </span><span>|</span><span> } ~</span></td></tr><tr><td style='text-align:center;' ><span>8</span></td><td style='text-align:left;' ><strong><span>图形字符</span></strong><span> 字母数字字符和标点符号字符的集合</span></td></tr><tr><td style='text-align:center;' ><span>9</span></td><td style='text-align:left;' ><strong><span>空格字符</span></strong><span> 制表符、换行符、垂直制表符、换页符、回车符、空格符的集合。</span></td></tr><tr><td style='text-align:center;' ><span>10</span></td><td style='text-align:left;' ><strong><span>可打印字符</span></strong><span> 字母数字字符、标点符号字符和空格字符的集合。</span></td></tr><tr><td style='text-align:center;' ><span>11</span></td><td style='text-align:left;' ><strong><span>控制字符</span></strong><span> 在 ASCII 编码中，这些字符的八进制代码是从 000 到 037，以及 177（DEL）。</span></td></tr><tr><td style='text-align:center;' ><span>12</span></td><td style='text-align:left;' ><strong><span>空白字符</span></strong><span> 包括空格符和制表符。</span></td></tr><tr><td style='text-align:center;' ><span>13</span></td><td style='text-align:left;' ><strong><span>字母字符</span></strong><span> 小写字母和大写字母的集合。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="3errnoh" class="md-header-anchor"></a><span>3、&lt;errno.h&gt;</span></h3><h4><a name="简介-n3459" class="md-header-anchor"></a><span>简介</span></h4><p><span>C 标准库的 </span><strong><span>errno.h</span></strong><span> 头文件定义了整数变量 </span><strong><span>errno</span></strong><span>，它是通过系统调用设置的，在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值，因此它可以被一个程序读取和修改。</span></p><p><span>在程序启动时，</span><strong><span>errno</span></strong><span> 设置为零，C 标准库中的特定函数修改它的值为一些非零值以表示某些类型的错误。您也可以在适当的时候修改它的值或重置为零。</span></p><p><strong><span>errno.h</span></strong><span> 头文件定义了一系列表示不同错误代码的宏，这些宏应扩展为类型为 </span><strong><span>int</span></strong><span> 的整数常量表达式。</span></p><h4><a name="库宏-n3463" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面列出了头文件 errno.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-errno.html'><span>extern int errno</span></a><span> 这是通过系统调用设置的宏，在错误事件中的某些库函数表明了什么发生了错误。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-edom.html'><span>EDOM Domain Error</span></a><span> 这个宏表示一个域错误，它在输入参数超出数学函数定义的域时发生，errno 被设置为 EDOM。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-erange.html'><span>ERANGE Range Error</span></a><span> 这个宏表示一个范围错误，它在输入参数超出数学函数定义的范围时发生，errno 被设置为 ERANGE。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="4floath" class="md-header-anchor"></a><span>4、&lt;float.h&gt;</span></h3><h4><a name="简介-n3480" class="md-header-anchor"></a><span>简介</span></h4><p><span>C 标准库的 </span><strong><span>float.h</span></strong><span> 头文件包含了一组与浮点值相关的依赖于平台的常量。这些常量是由 ANSI C 提出的，这让程序更具有可移植性。在讲解这些常量之前，最好先弄清楚浮点数是由下面四个元素组成的：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>组件</span></th><th style='text-align:left;' ><span>组件描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>S</span></td><td style='text-align:left;' ><span>符号 ( +/- )</span></td></tr><tr><td style='text-align:left;' ><span>b</span></td><td style='text-align:left;' ><span>指数表示的基数，2 表示二进制，10 表示十进制，16 表示十六进制，等等...</span></td></tr><tr><td style='text-align:left;' ><span>e</span></td><td style='text-align:left;' ><span>指数，一个介于最小值 </span><strong><span>emin</span></strong><span> 和最大值 </span><strong><span>emax</span></strong><span> 之间的整数。</span></td></tr><tr><td style='text-align:left;' ><span>p</span></td><td style='text-align:left;' ><span>精度，基数 b 的有效位数</span></td></tr></tbody></table></figure><p><span>基于以上 4 个组成部分，一个浮点数的值如下：</span></p><p><strong><span>floating-point = ( S ) p x be</span></strong><span> 或 </span><strong><span>floating-point = (+/-) precision x baseexponent</span></strong></p><h4><a name="库宏-n3500" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面的值是特定实现的，且是通过 #define 指令来定义的，这些值都不得低于下边所给出的值。请注意，所有的实例 FLT 是指类型 float，DBL 是指类型 double，LDBL 是指类型 long double。</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>宏</span></th><th style='text-align:left;' ><span>描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>FLT_ROUNDS</span></td><td style='text-align:left;' ><span>定义浮点加法的舍入模式，它可以是下列任何一个值：-1 - 无法确定0 - 趋向于零1 - 去最近的值2 - 趋向于正无穷3 - 趋向于负无穷</span></td></tr><tr><td style='text-align:left;' ><span>FLT_RADIX 2</span></td><td style='text-align:left;' ><span>这个宏定义了指数表示的基数。基数 2 表示二进制，基数 10 表示十进制，基数 16 表示十六进制。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MANT_DIGDBL_MANT_DIGLDBL_MANT_DIG</span></td><td style='text-align:left;' ><span>这些宏定义了 FLT_RADIX 基数中的位数。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_DIG 6DBL_DIG 10LDBL_DIG 10</span></td><td style='text-align:left;' ><span>这些宏定义了舍入后不会改变表示的十进制数字的最大值（基数 10）。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MIN_EXPDBL_MIN_EXPLDBL_MIN_EXP</span></td><td style='text-align:left;' ><span>这些宏定义了基数为 FLT_RADIX 时的指数的最小负整数值。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MIN_10_EXP -37DBL_MIN_10_EXP -37LDBL_MIN_10_EXP -37</span></td><td style='text-align:left;' ><span>这些宏定义了基数为 10 时的指数的最小负整数值。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MAX_EXPDBL_MAX_EXPLDBL_MAX_EXP</span></td><td style='text-align:left;' ><span>这些宏定义了基数为 FLT_RADIX 时的指数的最大整数值。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MAX_10_EXP +37DBL_MAX_10_EXP +37LDBL_MAX_10_EXP +37</span></td><td style='text-align:left;' ><span>这些宏定义了基数为 10 时的指数的最大整数值。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MAX 1E+37DBL_MAX 1E+37LDBL_MAX 1E+37</span></td><td style='text-align:left;' ><span>这些宏定义最大的有限浮点值。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_EPSILON 1E-5DBL_EPSILON 1E-9LDBL_EPSILON 1E-9</span></td><td style='text-align:left;' ><span>这些宏定义了可表示的最小有效数字。</span></td></tr><tr><td style='text-align:left;' ><span>FLT_MIN 1E-37DBL_MIN 1E-37LDBL_MIN 1E-37</span></td><td style='text-align:left;' ><span>这些宏定义了最小的浮点值。</span></td></tr></tbody></table></figure><h3><a name="5limitsh" class="md-header-anchor"></a><span>5、&lt;limits.h&gt;</span></h3><h4><a name="简介-n3540" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>limits.h</span></strong><span> 头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型（比如 char、int 和 long）的值。</span></p><p><span>这些限制指定了变量不能存储任何超出这些限制的值，例如一个无符号可以存储的最大值是 255。</span></p><h4><a name="库宏-n3543" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面的值是特定实现的，且是通过 #define 指令来定义的，这些值都不得低于下边所给出的值。</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>宏</span></th><th style='text-align:left;' ><span>值</span></th><th style='text-align:left;' ><span>描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>CHAR_BIT</span></td><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><span>定义一个字节的比特数。</span></td></tr><tr><td style='text-align:left;' ><span>SCHAR_MIN</span></td><td style='text-align:left;' ><span>-128</span></td><td style='text-align:left;' ><span>定义一个有符号字符的最小值。</span></td></tr><tr><td style='text-align:left;' ><span>SCHAR_MAX</span></td><td style='text-align:left;' ><span>127</span></td><td style='text-align:left;' ><span>定义一个有符号字符的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>UCHAR_MAX</span></td><td style='text-align:left;' ><span>255</span></td><td style='text-align:left;' ><span>定义一个无符号字符的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>CHAR_MIN</span></td><td style='text-align:left;' ><span>0</span></td><td style='text-align:left;' ><span>定义类型 char 的最小值，如果 char 表示负值，则它的值等于 SCHAR_MIN，否则等于 0。</span></td></tr><tr><td style='text-align:left;' ><span>CHAR_MAX</span></td><td style='text-align:left;' ><span>127</span></td><td style='text-align:left;' ><span>定义类型 char 的最大值，如果 char 表示负值，则它的值等于 SCHAR_MAX，否则等于 UCHAR_MAX。</span></td></tr><tr><td style='text-align:left;' ><span>MB_LEN_MAX</span></td><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><span>定义多字节字符中的最大字节数。</span></td></tr><tr><td style='text-align:left;' ><span>SHRT_MIN</span></td><td style='text-align:left;' ><span>-32768</span></td><td style='text-align:left;' ><span>定义一个短整型的最小值。</span></td></tr><tr><td style='text-align:left;' ><span>SHRT_MAX</span></td><td style='text-align:left;' ><span>+32767</span></td><td style='text-align:left;' ><span>定义一个短整型的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>USHRT_MAX</span></td><td style='text-align:left;' ><span>65535</span></td><td style='text-align:left;' ><span>定义一个无符号短整型的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>INT_MIN</span></td><td style='text-align:left;' ><span>-32768</span></td><td style='text-align:left;' ><span>定义一个整型的最小值。</span></td></tr><tr><td style='text-align:left;' ><span>INT_MAX</span></td><td style='text-align:left;' ><span>+32767</span></td><td style='text-align:left;' ><span>定义一个整型的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>UINT_MAX</span></td><td style='text-align:left;' ><span>65535</span></td><td style='text-align:left;' ><span>定义一个无符号整型的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>LONG_MIN</span></td><td style='text-align:left;' ><span>-2147483648</span></td><td style='text-align:left;' ><span>定义一个长整型的最小值。</span></td></tr><tr><td style='text-align:left;' ><span>LONG_MAX</span></td><td style='text-align:left;' ><span>+2147483647</span></td><td style='text-align:left;' ><span>定义一个长整型的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>ULONG_MAX</span></td><td style='text-align:left;' ><span>4294967295</span></td><td style='text-align:left;' ><span>定义一个无符号长整型的最大值。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="6localeh" class="md-header-anchor"></a><span>6、&lt;</span><strong><span>locale.h</span></strong><span>&gt;</span></h3><h4><a name="简介-n3616" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>locale.h</span></strong><span> 头文件定义了特定地域的设置，比如日期格式和货币符号。接下来我们将介绍一些宏，以及一个重要的结构 </span><strong><span>struct lconv</span></strong><span> 和两个重要的函数。</span></p><h4><a name="库宏-n3618" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面列出了头文件 locale.h 中定义的宏，这些宏将在下列的两个函数中使用：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>LC_ALL</span></strong><span> 设置下面的所有选项。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>LC_COLLATE</span></strong><span> 影响 strcoll 和 strxfrm 函数。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>LC_CTYPE</span></strong><span> 影响所有字符函数。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>LC_MONETARY</span></strong><span> 影响 localeconv 函数提供的货币信息。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><strong><span>LC_NUMERIC</span></strong><span> 影响 localeconv 函数提供的小数点格式化和信息。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><strong><span>LC_TIME</span></strong><span> 影响 strftime 函数。</span></td></tr></tbody></table></figure><h4><a name="库函数-n3642" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面列出了头文件 locale.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-setlocale.html'><span>char *setlocale(int category, const char *locale)</span></a><span> 设置或读取地域化信息。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-localeconv.html'><span>struct lconv *localeconv(void)</span></a><span> 设置或读取地域化信息。</span></td></tr></tbody></table></figure><h4><a name="库结构" class="md-header-anchor"></a><span>库结构</span></h4><pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 45px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 33px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre><div class="CodeMirror-linenumber CodeMirror-gutter-elt"><div>20</div></div></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -33px; width: 33px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 25px;">1</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">typedef struct {</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">2</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *decimal_point;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">3</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *thousands_sep;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">4</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *grouping; &nbsp; &nbsp;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">5</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *int_curr_symbol;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">6</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *currency_symbol;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">7</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *mon_decimal_point;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">8</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *mon_thousands_sep;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">9</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *mon_grouping;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 25px;">10</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *positive_sign;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">11</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char *negative_sign;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">12</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char int_frac_digits;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">13</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char frac_digits;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">14</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char p_cs_precedes;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">15</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char p_sep_by_space;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">16</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char n_cs_precedes;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">17</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char n_sep_by_space;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">18</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char p_sign_posn;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">19</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; char n_sign_posn;</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 25px;">20</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">} lconv</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 400px;"></div><div class="CodeMirror-gutters" style="height: 400px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 33px;"></div></div></div></div></pre><p><span>以下是各字段的描述：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>字段 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>decimal_point</span></strong><span> 用于非货币值的小数点字符。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>thousands_sep</span></strong><span> 用于非货币值的千位分隔符。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>grouping</span></strong><span> 一个表示非货币量中每组数字大小的字符串。每个字符代表一个整数值，每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>int_curr_symbol</span></strong><span> 国际货币符号使用的字符串。前三个字符是由 ISO 4217:1987 指定的，第四个字符用于分隔货币符号和货币量。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><strong><span>currency_symbol</span></strong><span> 用于货币的本地符号。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><strong><span>mon_decimal_point</span></strong><span> 用于货币值的小数点字符。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><strong><span>mon_thousands_sep</span></strong><span> 用于货币值的千位分隔符。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><strong><span>mon_grouping</span></strong><span> 一个表示货币值中每组数字大小的字符串。每个字符代表一个整数值，每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><strong><span>positive_sign</span></strong><span> 用于正货币值的字符。</span></td></tr><tr><td style='text-align:left;' ><span>10</span></td><td style='text-align:left;' ><strong><span>negative_sign</span></strong><span> 用于负货币值的字符。</span></td></tr><tr><td style='text-align:left;' ><span>11</span></td><td style='text-align:left;' ><strong><span>int_frac_digits</span></strong><span> 国际货币值中小数点后要显示的位数。</span></td></tr><tr><td style='text-align:left;' ><span>12</span></td><td style='text-align:left;' ><strong><span>frac_digits</span></strong><span> 货币值中小数点后要显示的位数。</span></td></tr><tr><td style='text-align:left;' ><span>13</span></td><td style='text-align:left;' ><strong><span>p_cs_precedes</span></strong><span> 如果等于 1，则 currency_symbol 出现在正货币值之前。如果等于 0，则 currency_symbol 出现在正货币值之后。</span></td></tr><tr><td style='text-align:left;' ><span>14</span></td><td style='text-align:left;' ><strong><span>p_sep_by_space</span></strong><span> 如果等于 1，则 currency_symbol 和正货币值之间使用空格分隔。如果等于 0，则 currency_symbol 和正货币值之间不使用空格分隔。</span></td></tr><tr><td style='text-align:left;' ><span>15</span></td><td style='text-align:left;' ><strong><span>n_cs_precedes</span></strong><span> 如果等于 1，则 currency_symbol 出现在负货币值之前。如果等于 0，则 currency_symbol 出现在负货币值之后。</span></td></tr><tr><td style='text-align:left;' ><span>16</span></td><td style='text-align:left;' ><strong><span>n_sep_by_space</span></strong><span> 如果等于 1，则 currency_symbol 和负货币值之间使用空格分隔。如果等于 0，则 currency_symbol 和负货币值之间不使用空格分隔。</span></td></tr><tr><td style='text-align:left;' ><span>17</span></td><td style='text-align:left;' ><strong><span>p_sign_posn</span></strong><span> 表示正货币值中正号的位置。</span></td></tr><tr><td style='text-align:left;' ><span>18</span></td><td style='text-align:left;' ><strong><span>n_sign_posn</span></strong><span> 表示负货币值中负号的位置。</span></td></tr></tbody></table></figure><p><span>下面的值用于 </span><strong><span>p_sign_posn</span></strong><span> 和 </span><strong><span>n_sign_posn</span></strong><span>:</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>值</span></th><th style='text-align:left;' ><span>描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>0</span></td><td style='text-align:left;' ><span>封装值和 currency_symbol 的括号。</span></td></tr><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><span>放置在值和 currency_symbol 之前的符号。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><span>放置在值和 currency_symbol 之后的符号。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><span>紧挨着放置在值和 currency_symbol 之前的符号。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><span>紧挨着放置在值和 currency_symbol 之后的符号。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="-7mathh" class="md-header-anchor"></a><span>7、&lt;math.h&gt;</span></h3><h4><a name="简介-n3737" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>math.h</span></strong><span> 头文件定义了各种数学函数和一个宏。在这个库中所有可用的功能都带有一个 </span><strong><span>double</span></strong><span> 类型的参数，且都返回 </span><strong><span>double</span></strong><span> 类型的结果。</span></p><h4><a name="库宏-n3739" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是这个库中定义的唯一的一个宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>HUGE_VAL</span></strong><span> 当函数的结果不可以表示为浮点数时。如果是因为结果的幅度太大以致于无法表示，则函数会设置 errno 为 ERANGE 来表示范围错误，并返回一个由宏 HUGE_VAL 或者它的否定（- HUGE_VAL）命名的一个特定的很大的值。如果结果的幅度太小，则会返回零值。在这种情况下，error 可能会被设置为 ERANGE，也有可能不会被设置为 ERANGE。</span></td></tr></tbody></table></figure><h4><a name="库函数-n3748" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面列出了头文件 math.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-acos.html'><span>double acos(double x)</span></a><span> 返回以弧度表示的 x 的反余弦。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-asin.html'><span>double asin(double x)</span></a><span> 返回以弧度表示的 x 的反正弦。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-atan.html'><span>double atan(double x)</span></a><span> 返回以弧度表示的 x 的反正切。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-atan2.html'><span>double atan2(double y, double x)</span></a><span> 返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-cos.html'><span>double cos(double x)</span></a><span> 返回弧度角 x 的余弦。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-cosh.html'><span>double cosh(double x)</span></a><span> 返回 x 的双曲余弦。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-sin.html'><span>double sin(double x)</span></a><span> 返回弧度角 x 的正弦。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-sinh.html'><span>double sinh(double x)</span></a><span> 返回 x 的双曲正弦。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-tanh.html'><span>double tanh(double x)</span></a><span> 返回 x 的双曲正切。</span></td></tr><tr><td style='text-align:left;' ><span>10</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-exp.html'><span>double exp(double x)</span></a><span> 返回 e 的 x 次幂的值。</span></td></tr><tr><td style='text-align:left;' ><span>11</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-frexp.html'><span>double frexp(double x, int *exponent)</span></a><span> 把浮点数 x 分解成尾数和指数。返回值是尾数，并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。</span></td></tr><tr><td style='text-align:left;' ><span>12</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ldexp.html'><span>double ldexp(double x, int exponent)</span></a><span> 返回 x 乘以 2 的 exponent 次幂。</span></td></tr><tr><td style='text-align:left;' ><span>13</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-log.html'><span>double log(double x)</span></a><span> 返回 x 的自然对数（基数为 e 的对数）。</span></td></tr><tr><td style='text-align:left;' ><span>14</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-log10.html'><span>double log10(double x)</span></a><span> 返回 x 的常用对数（基数为 10 的对数）。</span></td></tr><tr><td style='text-align:left;' ><span>15</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-modf.html'><span>double modf(double x, double *integer)</span></a><span> 返回值为小数部分（小数点后的部分），并设置 integer 为整数部分。</span></td></tr><tr><td style='text-align:left;' ><span>16</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-pow.html'><span>double pow(double x, double y)</span></a><span> 返回 x 的 y 次幂。</span></td></tr><tr><td style='text-align:left;' ><span>17</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-sqrt.html'><span>double sqrt(double x)</span></a><span> 返回 x 的平方根。</span></td></tr><tr><td style='text-align:left;' ><span>18</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ceil.html'><span>double ceil(double x)</span></a><span> 返回大于或等于 x 的最小的整数值。</span></td></tr><tr><td style='text-align:left;' ><span>19</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fabs.html'><span>double fabs(double x)</span></a><span> 返回 x 的绝对值。</span></td></tr><tr><td style='text-align:left;' ><span>20</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-floor.html'><span>double floor(double x)</span></a><span> 返回小于或等于 x 的最大的整数值。</span></td></tr><tr><td style='text-align:left;' ><span>21</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fmod.html'><span>double fmod(double x, double y)</span></a><span> 返回 x 除以 y 的余数。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="8setjmph" class="md-header-anchor"></a><span>8、&lt;setjmp.h&gt;</span></h3><h4><a name="简介-n3819" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>setjmp.h</span></strong><span> 头文件定义了宏 </span><strong><span>setjmp()</span></strong><span>、函数 </span><strong><span>longjmp()</span></strong><span> 和变量类型 </span><strong><span>jmp_buf</span></strong><span>，该变量类型会绕过正常的函数调用和返回规则。</span></p><h4><a name="库变量" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面列出了头文件 setjmp.h 中定义的变量：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>jmp_buf</span></strong><span> 这是一个用于存储宏 </span><strong><span>setjmp()</span></strong><span> 和函数 </span><strong><span>longjmp()</span></strong><span> 相关信息的数组类型。</span></td></tr></tbody></table></figure><h4><a name="库宏-n3830" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是这个库中定义的唯一的一个宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-setjmp.html'><span>int setjmp(jmp_buf environment)</span></a><span> 这个宏把当前环境保存在变量 </span><strong><span>environment</span></strong><span> 中，以便函数 </span><strong><span>longjmp()</span></strong><span> 后续使用。如果这个宏直接从宏调用中返回，则它会返回零，但是如果它从 </span><strong><span>longjmp()</span></strong><span> 函数调用中返回，则它会返回一个非零值。</span></td></tr></tbody></table></figure><h4><a name="库函数-n3839" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面是头文件 setjmp.h 中定义的唯一的一个函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-longjmp.html'><span>void longjmp(jmp_buf environment, int value)</span></a><span> 该函数恢复最近一次调用 </span><strong><span>setjmp()</span></strong><span> 宏时保存的环境，</span><strong><span>jmp_buf</span></strong><span> 参数的设置是由之前调用 setjmp() 生成的。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="9signalh" class="md-header-anchor"></a><span>9、&lt;signal.h&gt;</span></h3><h4><a name="简介-n3856" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>signal.h</span></strong><span> 头文件定义了一个变量类型 </span><strong><span>sig_atomic_t</span></strong><span>、两个函数调用和一些宏来处理程序执行期间报告的不同信号。</span></p><h4><a name="库变量-n3858" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 signal.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>sig_atomic_t</span></strong><span> 这是 </span><strong><span>int</span></strong><span> 类型，在信号处理程序中作为变量使用。它是一个对象的整数类型，该对象可以作为一个原子实体访问，即使存在异步信号时，该对象可以作为一个原子实体访问。</span></td></tr></tbody></table></figure><h4><a name="库宏-n3867" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 signal.h 中定义的宏，这些宏将在下列两个函数中使用。</span><strong><span>SIG_</span></strong><span> 宏与 signal 函数一起使用来定义信号的功能。</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>SIG_DFL</span></strong><span> 默认的信号处理程序。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>SIG_ERR</span></strong><span> 表示一个信号错误。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>SIG_IGN</span></strong><span> 忽视信号。</span></td></tr></tbody></table></figure><p><strong><span>SIG</span></strong><span> 宏用于表示以下各种条件的信号码：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>SIGABRT</span></strong><span> 程序异常终止。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>SIGFPE</span></strong><span> 算术运算出错，如除数为 0 或溢出。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>SIGILL</span></strong><span> 非法函数映象，如非法指令。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>SIGINT</span></strong><span> 中断信号，如 ctrl-C。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><strong><span>SIGSEGV</span></strong><span> 非法访问存储器，如访问不存在的内存单元。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><strong><span>SIGTERM</span></strong><span> 发送给本程序的终止请求信号。</span></td></tr></tbody></table></figure><h4><a name="库函数-n3905" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面是头文件 signal.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-signal.html'><span>void (</span><em><span>signal(int sig, void (</span></em><span>func)(int)))(int)</span></a><span> 该函数设置一个函数来处理信号，即信号处理程序。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-raise.html'><span>int raise(int sig)</span></a><span> 该函数会促使生成信号 </span><strong><span>sig</span></strong><span>。sig 参数与 SIG 宏兼容。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="10stdargh" class="md-header-anchor"></a><span>10、&lt;stdarg.h&gt;</span></h3><h4><a name="简介-n3928" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>stdarg.h</span></strong><span> 头文件定义了一个变量类型 </span><strong><span>va_list</span></strong><span> 和三个宏，这三个宏可用于在参数个数未知（即参数个数可变）时获取函数中的参数。</span></p><p><span>可变参数的函数通在参数列表的末尾是使用省略号(,...)定义的。</span></p><h4><a name="库变量-n3931" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 stdarg.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>va_list</span></strong><span> 这是一个适用于 </span><strong><span>va_start()、va_arg()</span></strong><span> 和 </span><strong><span>va_end()</span></strong><span> 这三个宏存储信息的类型。</span></td></tr></tbody></table></figure><h4><a name="库宏-n3940" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 stdarg.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-va_start.html'><span>void va_start(va_list ap, last_arg)</span></a><span> 这个宏初始化 </span><strong><span>ap</span></strong><span> 变量，它与 </span><strong><span>va_arg</span></strong><span> 和 </span><strong><span>va_end</span></strong><span> 宏是一起使用的。</span><strong><span>last_arg</span></strong><span> 是最后一个传递给函数的已知的固定参数，即省略号之前的参数。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-va_arg.html'><span>type va_arg(va_list ap, type)</span></a><span> 这个宏检索函数参数列表中类型为 </span><strong><span>type</span></strong><span> 的下一个参数。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-va_end.html'><span>void va_end(va_list ap)</span></a><span> 这个宏允许使用了 </span><strong><span>va_start</span></strong><span> 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 </span><strong><span>va_end</span></strong><span>，则结果为未定义。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="11stddefh" class="md-header-anchor"></a><span>11、&lt;stddef.h&gt;</span></h3><h4><a name="简介-n3966" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>stddef .h</span></strong><span> 头文件定义了各种变量类型和宏。这些定义中的大部分也出现在其它头文件中。</span></p><h4><a name="库变量-n3968" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 stddef.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>ptrdiff_t</span></strong><span> 这是有符号整数类型，它是两个指针相减的结果。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>size_t</span></strong><span> 这是无符号整数类型，它是 </span><strong><span>sizeof</span></strong><span> 关键字的结果。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>wchar_t</span></strong><span> 这是一个宽字符常量大小的整数类型。</span></td></tr></tbody></table></figure><h4><a name="库宏-n3983" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 stddef.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-null.html'><span>NULL</span></a><span> 这个宏是一个空指针常量的值。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-macro-offsetof.html'><span>offsetof(type, member-designator)</span></a><span> 这会生成一个类型为 size_t 的整型常量，它是一个结构成员相对于结构开头的字节偏移量。成员是由 </span><em><span>member-designator</span></em><span> 给定的，结构的名称是在 </span><em><span>type</span></em><span> 中给定的。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="12stdioh" class="md-header-anchor"></a><span>12、&lt;stdio.h&gt;</span></h3><h4><a name="简介-n4010" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>stdio .h</span></strong><span> 头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出。</span></p><h4><a name="库变量-n4012" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 stdio.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>size_t</span></strong><span> 这是无符号整数类型，它是 </span><strong><span>sizeof</span></strong><span> 关键字的结果。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>FILE</span></strong><span> 这是一个适合存储文件流信息的对象类型。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>fpos_t</span></strong><span> 这是一个适合存储文件中任何位置的对象类型。</span></td></tr></tbody></table></figure><h4><a name="库宏-n4027" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 stdio.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>NULL</span></strong><span> 这个宏是一个空指针常量的值。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><em><span>IOFBF、</span></em><span>IOLBF</span></strong><span> 和 </span><strong><span>_IONBF</span></strong><span> 这些宏扩展了带有特定值的整型常量表达式，并适用于 </span><strong><span>setvbuf</span></strong><span> 函数的第三个参数。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>BUFSIZ</span></strong><span> 这个宏是一个整数，该整数代表了 </span><strong><span>setbuf</span></strong><span> 函数使用的缓冲区大小。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>EOF</span></strong><span> 这个宏是一个表示已经到达文件结束的负整数。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><strong><span>FOPEN_MAX</span></strong><span> 这个宏是一个整数，该整数代表了系统可以同时打开的文件数量。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><strong><span>FILENAME_MAX</span></strong><span> 这个宏是一个整数，该整数代表了字符数组可以存储的文件名的最大长度。如果实现没有任何限制，则该值应为推荐的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><strong><span>L_tmpnam</span></strong><span> 这个宏是一个整数，该整数代表了字符数组可以存储的由 tmpnam 函数创建的临时文件名的最大长度。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><strong><span>SEEK_CUR、SEEK_END</span></strong><span> 和 </span><strong><span>SEEK_SET</span></strong><span> 这些宏是在 </span><strong><span>fseek</span></strong><span> 函数中使用，用于在一个文件中定位不同的位置。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><strong><span>TMP_MAX</span></strong><span> 这个宏是 tmpnam 函数可生成的独特文件名的最大数量。</span></td></tr><tr><td style='text-align:left;' ><span>10</span></td><td style='text-align:left;' ><strong><span>stderr、stdin</span></strong><span> 和 </span><strong><span>stdout</span></strong><span> 这些宏是指向 FILE 类型的指针，分别对应于标准错误、标准输入和标准输出流。</span></td></tr></tbody></table></figure><h4><a name="库函数-n4063" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面是头文件 stdio.h 中定义的函数：</span></p><blockquote><p><span>为了更好地理解函数，请按照下面的序列学习这些函数，因为第一个函数中创建的文件会在后续的函数中使用到。</span></p></blockquote><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fclose.html'><span>int fclose(FILE *stream)</span></a><span> 关闭流 stream。刷新所有的缓冲区。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-clearerr.html'><span>void clearerr(FILE *stream)</span></a><span> 清除给定流 stream 的文件结束和错误标识符。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-feof.html'><span>int feof(FILE *stream)</span></a><span> 测试给定流 stream 的文件结束标识符。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ferror.html'><span>int ferror(FILE *stream)</span></a><span> 测试给定流 stream 的错误标识符。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fflush.html'><span>int fflush(FILE *stream)</span></a><span> 刷新流 stream 的输出缓冲区。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fgetpos.html'><span>int fgetpos(FILE *stream, fpos_t *pos)</span></a><span> 获取流 stream 的当前文件位置，并把它写入到 pos。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fopen.html'><span>FILE *fopen(const char *filename, const char *mode)</span></a><span> 使用给定的模式 mode 打开 filename 所指向的文件。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fread.html'><span>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)</span></a><span> 从给定流 stream 读取数据到 ptr 所指向的数组中。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-freopen.html'><span>FILE *freopen(const char *filename, const char *mode, FILE *stream)</span></a><span> 把一个新的文件名 filename 与给定的打开的流 stream 关联，同时关闭流中的旧文件。</span></td></tr><tr><td style='text-align:left;' ><span>10</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fseek.html'><span>int fseek(FILE *stream, long int offset, int whence)</span></a><span> 设置流 stream 的文件位置为给定的偏移 offset，参数 </span><em><span>offset</span></em><span> 意味着从给定的 </span><em><span>whence</span></em><span> 位置查找的字节数。</span></td></tr><tr><td style='text-align:left;' ><span>11</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fsetpos.html'><span>int fsetpos(FILE *stream, const fpos_t *pos)</span></a><span> 设置给定流 stream 的文件位置为给定的位置。参数 </span><em><span>pos</span></em><span> 是由函数 fgetpos 给定的位置。</span></td></tr><tr><td style='text-align:left;' ><span>12</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ftell.html'><span>long int ftell(FILE *stream)</span></a><span> 返回给定流 stream 的当前文件位置。</span></td></tr><tr><td style='text-align:left;' ><span>13</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fwrite.html'><span>size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)</span></a><span> 把 ptr 所指向的数组中的数据写入到给定流 stream 中。</span></td></tr><tr><td style='text-align:left;' ><span>14</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-remove.html'><span>int remove(const char *filename)</span></a><span> 删除给定的文件名 filename，以便它不再被访问。</span></td></tr><tr><td style='text-align:left;' ><span>15</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-rename.html'><span>int rename(const char *old_filename, const char *new_filename)</span></a><span> 把 old_filename 所指向的文件名改为 new_filename。</span></td></tr><tr><td style='text-align:left;' ><span>16</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-rewind.html'><span>void rewind(FILE *stream)</span></a><span> 设置文件位置为给定流 stream 的文件的开头。</span></td></tr><tr><td style='text-align:left;' ><span>17</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-setbuf.html'><span>void setbuf(FILE *stream, char *buffer)</span></a><span> 定义流 stream 应如何缓冲。</span></td></tr><tr><td style='text-align:left;' ><span>18</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-setvbuf.html'><span>int setvbuf(FILE *stream, char *buffer, int mode, size_t size)</span></a><span> 另一个定义流 stream 应如何缓冲的函数。</span></td></tr><tr><td style='text-align:left;' ><span>19</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-tmpfile.html'><span>FILE *tmpfile(void)</span></a><span> 以二进制更新模式(wb+)创建临时文件。</span></td></tr><tr><td style='text-align:left;' ><span>20</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-tmpnam.html'><span>char *tmpnam(char *str)</span></a><span> 生成并返回一个有效的临时文件名，该文件名之前是不存在的。</span></td></tr><tr><td style='text-align:left;' ><span>21</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fprintf.html'><span>int fprintf(FILE *stream, const char *format, ...)</span></a><span> 发送格式化输出到流 stream 中。</span></td></tr><tr><td style='text-align:left;' ><span>22</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-printf.html'><span>int printf(const char *format, ...)</span></a><span> 发送格式化输出到标准输出 stdout。</span></td></tr><tr><td style='text-align:left;' ><span>23</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-sprintf.html'><span>int sprintf(char *str, const char *format, ...)</span></a><span> 发送格式化输出到字符串。</span></td></tr><tr><td style='text-align:left;' ><span>24</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-vfprintf.html'><span>int vfprintf(FILE *stream, const char *format, va_list arg)</span></a><span> 使用参数列表发送格式化输出到流 stream 中。</span></td></tr><tr><td style='text-align:left;' ><span>25</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-vprintf.html'><span>int vprintf(const char *format, va_list arg)</span></a><span> 使用参数列表发送格式化输出到标准输出 stdout。</span></td></tr><tr><td style='text-align:left;' ><span>26</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-vsprintf.html'><span>int vsprintf(char *str, const char *format, va_list arg)</span></a><span> 使用参数列表发送格式化输出到字符串。</span></td></tr><tr><td style='text-align:left;' ><span>27</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fscanf.html'><span>int fscanf(FILE *stream, const char *format, ...)</span></a><span> 从流 stream 读取格式化输入。</span></td></tr><tr><td style='text-align:left;' ><span>28</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-scanf.html'><span>int scanf(const char *format, ...)</span></a><span> 从标准输入 stdin 读取格式化输入。</span></td></tr><tr><td style='text-align:left;' ><span>29</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-sscanf.html'><span>int sscanf(const char *str, const char *format, ...)</span></a><span> 从字符串读取格式化输入。</span></td></tr><tr><td style='text-align:left;' ><span>30</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fgetc.html'><span>int fgetc(FILE *stream)</span></a><span> 从指定的流 stream 获取下一个字符（一个无符号字符），并把位置标识符往前移动。</span></td></tr><tr><td style='text-align:left;' ><span>31</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fgets.html'><span>char *fgets(char *str, int n, FILE *stream)</span></a><span> 从指定的流 stream 读取一行，并把它存储在 str 所指向的字符串内。当读取 </span><strong><span>(n-1)</span></strong><span> 个字符时，或者读取到换行符时，或者到达文件末尾时，它会停止，具体视情况而定。</span></td></tr><tr><td style='text-align:left;' ><span>32</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fputc.html'><span>int fputc(int char, FILE *stream)</span></a><span> 把参数 char 指定的字符（一个无符号字符）写入到指定的流 stream 中，并把位置标识符往前移动。</span></td></tr><tr><td style='text-align:left;' ><span>33</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-fputs.html'><span>int fputs(const char *str, FILE *stream)</span></a><span> 把字符串写入到指定的流 stream 中，但不包括空字符。</span></td></tr><tr><td style='text-align:left;' ><span>34</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-getc.html'><span>int getc(FILE *stream)</span></a><span> 从指定的流 stream 获取下一个字符（一个无符号字符），并把位置标识符往前移动。</span></td></tr><tr><td style='text-align:left;' ><span>35</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-getchar.html'><span>int getchar(void)</span></a><span> 从标准输入 stdin 获取一个字符（一个无符号字符）。</span></td></tr><tr><td style='text-align:left;' ><span>36</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-gets.html'><span>char *gets(char *str)</span></a><span> 从标准输入 stdin 读取一行，并把它存储在 str 所指向的字符串中。当读取到换行符时，或者到达文件末尾时，它会停止，具体视情况而定。</span></td></tr><tr><td style='text-align:left;' ><span>37</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-putc.html'><span>int putc(int char, FILE *stream)</span></a><span> 把参数 char 指定的字符（一个无符号字符）写入到指定的流 stream 中，并把位置标识符往前移动。</span></td></tr><tr><td style='text-align:left;' ><span>38</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-putchar.html'><span>int putchar(int char)</span></a><span> 把参数 char 指定的字符（一个无符号字符）写入到标准输出 stdout 中。</span></td></tr><tr><td style='text-align:left;' ><span>39</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-puts.html'><span>int puts(const char *str)</span></a><span> 把一个字符串写入到标准输出 stdout，直到空字符，但不包括空字符。换行符会被追加到输出中。</span></td></tr><tr><td style='text-align:left;' ><span>40</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ungetc.html'><span>int ungetc(int char, FILE *stream)</span></a><span> 把字符 char（一个无符号字符）推入到指定的流 stream 中，以便它是下一个被读取到的字符。</span></td></tr><tr><td style='text-align:left;' ><span>41</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-perror.html'><span>void perror(const char *str)</span></a><span> 把一个描述性错误消息输出到标准错误 stderr。首先输出字符串 str，后跟一个冒号，然后是一个空格。</span></td></tr><tr><td style='text-align:left;' ><span>42</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-snprintf.html'><span>int snprintf(char *str, size_t size, const char *format, ...)</span></a><span> 格式字符串到 str 中。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="13stdlib-h" class="md-header-anchor"></a><span>13、&lt;stdlib .h&gt;</span></h3><h4><a name="简介-n4341" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>stdlib .h</span></strong><span> 头文件定义了四个变量类型、一些宏和各种通用工具函数。</span></p><h4><a name="库变量-n4210" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 stdlib.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>size_t</span></strong><span> 这是无符号整数类型，它是 </span><strong><span>sizeof</span></strong><span> 关键字的结果。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>wchar_t</span></strong><span> 这是一个宽字符常量大小的整数类型。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>div_t</span></strong><span> 这是 </span><strong><span>div</span></strong><span> 函数返回的结构。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>ldiv_t</span></strong><span> 这是 </span><strong><span>ldiv</span></strong><span> 函数返回的结构。</span></td></tr></tbody></table></figure><h4><a name="库宏-n4228" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 stdlib.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>NULL</span></strong><span> 这个宏是一个空指针常量的值。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>EXIT_FAILURE</span></strong><span> 这是 exit 函数失败时要返回的值。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>EXIT_SUCCESS</span></strong><span> 这是 exit 函数成功时要返回的值。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>RAND_MAX</span></strong><span> 这个宏是 rand 函数返回的最大值。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><strong><span>MB_CUR_MAX</span></strong><span> 这个宏表示在多字节字符集中的最大字符数，不能大于 MB_LEN_MAX。</span></td></tr></tbody></table></figure><h4><a name="库函数-n4249" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面是头文件 stdlib.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-atof.html'><span>double atof(const char *str)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的字符串转换为一个浮点数（类型为 double 型）。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-atoi.html'><span>int atoi(const char *str)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的字符串转换为一个整数（类型为 int 型）。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-atol.html'><span>long int atol(const char *str)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的字符串转换为一个长整数（类型为 long int 型）。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strtod.html'><span>double strtod(const char *str, char **endptr)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的字符串转换为一个浮点数（类型为 double 型）。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strtol.html'><span>long int strtol(const char *str, char **endptr, int base)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的字符串转换为一个长整数（类型为 long int 型）。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strtoul.html'><span>unsigned long int strtoul(const char *str, char **endptr, int base)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的字符串转换为一个无符号长整数（类型为 unsigned long int 型）。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-calloc.html'><span>void *calloc(size_t nitems, size_t size)</span></a><span> 分配所需的内存空间，并返回一个指向它的指针。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-free.html'><span>void free(void *ptr)</span></a><span> 释放之前调用 </span><em><span>calloc、malloc</span></em><span> 或 </span><em><span>realloc</span></em><span> 所分配的内存空间。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-malloc.html'><span>void *malloc(size_t size)</span></a><span> 分配所需的内存空间，并返回一个指向它的指针。</span></td></tr><tr><td style='text-align:left;' ><span>10</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-realloc.html'><span>void *realloc(void *ptr, size_t size)</span></a><span> 尝试重新调整之前调用 </span><em><span>malloc</span></em><span> 或 </span><em><span>calloc</span></em><span> 所分配的 ptr 所指向的内存块的大小。</span></td></tr><tr><td style='text-align:left;' ><span>11</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-abort.html'><span>void abort(void)</span></a><span> 使一个异常程序终止。</span></td></tr><tr><td style='text-align:left;' ><span>12</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-atexit.html'><span>int atexit(void (*func)(void))</span></a><span> 当程序正常终止时，调用指定的函数 </span><strong><span>func</span></strong><span>。</span></td></tr><tr><td style='text-align:left;' ><span>13</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-exit.html'><span>void exit(int status)</span></a><span> 使程序正常终止。</span></td></tr><tr><td style='text-align:left;' ><span>14</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-getenv.html'><span>char *getenv(const char *name)</span></a><span> 搜索 name 所指向的环境字符串，并返回相关的值给字符串。</span></td></tr><tr><td style='text-align:left;' ><span>15</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-system.html'><span>int system(const char *string)</span></a><span> 由 string 指定的命令传给要被命令处理器执行的主机环境。</span></td></tr><tr><td style='text-align:left;' ><span>16</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-bsearch.html'><span>void *bsearch(const void *key, const void </span><em><span>base, size_t nitems, size_t size, int (</span></em><span>compar)(const void *, const void *))</span></a><span> 执行二分查找。</span></td></tr><tr><td style='text-align:left;' ><span>17</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-qsort.html'><span>void qsort(void </span><em><span>base, size_t nitems, size_t size, int (</span></em><span>compar)(const void </span><em><span>, const void</span></em><span>))</span></a><span> 数组排序。</span></td></tr><tr><td style='text-align:left;' ><span>18</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-abs.html'><span>int abs(int x)</span></a><span> 返回 x 的绝对值。</span></td></tr><tr><td style='text-align:left;' ><span>19</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-div.html'><span>div_t div(int numer, int denom)</span></a><span> 分子除以分母。</span></td></tr><tr><td style='text-align:left;' ><span>20</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-labs.html'><span>long int labs(long int x)</span></a><span> 返回 x 的绝对值。</span></td></tr><tr><td style='text-align:left;' ><span>21</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ldiv.html'><span>ldiv_t ldiv(long int numer, long int denom)</span></a><span> 分子除以分母。</span></td></tr><tr><td style='text-align:left;' ><span>22</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-rand.html'><span>int rand(void)</span></a><span> 返回一个范围在 0 到 </span><em><span>RAND_MAX</span></em><span> 之间的伪随机数。</span></td></tr><tr><td style='text-align:left;' ><span>23</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-srand.html'><span>void srand(unsigned int seed)</span></a><span> 该函数播种由函数 </span><strong><span>rand</span></strong><span> 使用的随机数发生器。</span></td></tr><tr><td style='text-align:left;' ><span>24</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-mblen.html'><span>int mblen(const char *str, size_t n)</span></a><span> 返回参数 </span><em><span>str</span></em><span> 所指向的多字节字符的长度。</span></td></tr><tr><td style='text-align:left;' ><span>25</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-mbstowcs.html'><span>size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)</span></a><span> 把参数 </span><em><span>str</span></em><span> 所指向的多字节字符的字符串转换为参数 </span><em><span>pwcs</span></em><span> 所指向的数组。</span></td></tr><tr><td style='text-align:left;' ><span>26</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-mbtowc.html'><span>int mbtowc(whcar_t *pwc, const char *str, size_t n)</span></a><span> 检查参数 </span><em><span>str</span></em><span> 所指向的多字节字符。</span></td></tr><tr><td style='text-align:left;' ><span>27</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-wcstombs.html'><span>size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)</span></a><span> 把数组 </span><em><span>pwcs</span></em><span> 中存储的编码转换为多字节字符，并把它们存储在字符串 </span><em><span>str</span></em><span> 中。</span></td></tr><tr><td style='text-align:left;' ><span>28</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-wctomb.html'><span>int wctomb(char *str, wchar_t wchar)</span></a><span> 检查对应于参数 </span><em><span>wchar</span></em><span> 所给出的多字节字符的编码。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="14stringh" class="md-header-anchor"></a><span>14、&lt;string.h&gt;</span></h3><h4><a name="简介-n4361" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>string .h</span></strong><span> 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。</span></p><h4><a name="库变量-n4363" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 string.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>size_t</span></strong><span> 这是无符号整数类型，它是 </span><strong><span>sizeof</span></strong><span> 关键字的结果。</span></td></tr></tbody></table></figure><h4><a name="库宏-n4372" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 string.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>NULL</span></strong><span> 这个宏是一个空指针常量的值。</span></td></tr></tbody></table></figure><h4><a name="库函数-n4381" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面是头文件 string.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-memchr.html'><span>void *memchr(const void *str, int c, size_t n)</span></a><span> 在参数 </span><em><span>str</span></em><span> 所指向的字符串的前 n 个字节中搜索第一次出现字符 c（一个无符号字符）的位置。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-memcmp.html'><span>int memcmp(const void *str1, const void *str2, size_t n)</span></a><span> 把 </span><em><span>str1</span></em><span> 和 </span><em><span>str2</span></em><span> 的前 n 个字节进行比较。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-memcpy.html'><span>void *memcpy(void *dest, const void *src, size_t n)</span></a><span> 从 src 复制 n 个字符到 </span><em><span>dest</span></em><span>。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-memmove.html'><span>void *memmove(void *dest, const void *src, size_t n)</span></a><span> 另一个用于从 </span><em><span>src</span></em><span> 复制 n 个字符到 </span><em><span>dest</span></em><span> 的函数。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-memset.html'><span>void *memset(void *str, int c, size_t n)</span></a><span> 复制字符 c（一个无符号字符）到参数 </span><em><span>str</span></em><span> 所指向的字符串的前 n 个字符。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strcat.html'><span>char *strcat(char *dest, const char *src)</span></a><span> 把 </span><em><span>src</span></em><span> 所指向的字符串追加到 </span><em><span>dest</span></em><span> 所指向的字符串的结尾。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strncat.html'><span>char *strncat(char *dest, const char *src, size_t n)</span></a><span> 把 </span><em><span>src</span></em><span> 所指向的字符串追加到 </span><em><span>dest</span></em><span> 所指向的字符串的结尾，直到 n 字符长度为止。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strchr.html'><span>char *strchr(const char *str, int c)</span></a><span> 在参数 </span><em><span>str</span></em><span> 所指向的字符串中搜索第一次出现字符 c（一个无符号字符）的位置。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strcmp.html'><span>int strcmp(const char *str1, const char *str2)</span></a><span> 把 </span><em><span>str1</span></em><span> 所指向的字符串和 </span><em><span>str2</span></em><span> 所指向的字符串进行比较。</span></td></tr><tr><td style='text-align:left;' ><span>10</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strncmp.html'><span>int strncmp(const char *str1, const char *str2, size_t n)</span></a><span> 把 </span><em><span>str1</span></em><span> 和 </span><em><span>str2</span></em><span> 进行比较，最多比较前 n 个字节。</span></td></tr><tr><td style='text-align:left;' ><span>11</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strcoll.html'><span>int strcoll(const char *str1, const char *str2)</span></a><span> 把 </span><em><span>str1</span></em><span> 和 </span><em><span>str2</span></em><span> 进行比较，结果取决于 LC_COLLATE 的位置设置。</span></td></tr><tr><td style='text-align:left;' ><span>12</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strcpy.html'><span>char *strcpy(char *dest, const char *src)</span></a><span> 把 </span><em><span>src</span></em><span> 所指向的字符串复制到 </span><em><span>dest</span></em><span>。</span></td></tr><tr><td style='text-align:left;' ><span>13</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strncpy.html'><span>char *strncpy(char *dest, const char *src, size_t n)</span></a><span> 把 </span><em><span>src</span></em><span> 所指向的字符串复制到 </span><em><span>dest</span></em><span>，最多复制 n 个字符。</span></td></tr><tr><td style='text-align:left;' ><span>14</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strcspn.html'><span>size_t strcspn(const char *str1, const char *str2)</span></a><span> 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。</span></td></tr><tr><td style='text-align:left;' ><span>15</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strerror.html'><span>char *strerror(int errnum)</span></a><span> 从内部数组中搜索错误号 errnum，并返回一个指向错误消息字符串的指针。</span></td></tr><tr><td style='text-align:left;' ><span>16</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strlen.html'><span>size_t strlen(const char *str)</span></a><span> 计算字符串 str 的长度，直到空结束字符，但不包括空结束字符。</span></td></tr><tr><td style='text-align:left;' ><span>17</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strpbrk.html'><span>char *strpbrk(const char *str1, const char *str2)</span></a><span> 检索字符串 </span><em><span>str1</span></em><span> 中第一个匹配字符串 </span><em><span>str2</span></em><span> 中字符的字符，不包含空结束字符。也就是说，依次检验字符串 str1 中的字符，当被检验字符在字符串 str2 中也包含时，则停止检验，并返回该字符位置。</span></td></tr><tr><td style='text-align:left;' ><span>18</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strrchr.html'><span>char *strrchr(const char *str, int c)</span></a><span> 在参数 </span><em><span>str</span></em><span> 所指向的字符串中搜索最后一次出现字符 c（一个无符号字符）的位置。</span></td></tr><tr><td style='text-align:left;' ><span>19</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strspn.html'><span>size_t strspn(const char *str1, const char *str2)</span></a><span> 检索字符串 </span><em><span>str1</span></em><span> 中第一个不在字符串 </span><em><span>str2</span></em><span> 中出现的字符下标。</span></td></tr><tr><td style='text-align:left;' ><span>20</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strstr.html'><span>char *strstr(const char *haystack, const char *needle)</span></a><span> 在字符串 </span><em><span>haystack</span></em><span> 中查找第一次出现字符串 </span><em><span>needle</span></em><span>（不包含空结束字符）的位置。</span></td></tr><tr><td style='text-align:left;' ><span>21</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strtok.html'><span>char *strtok(char *str, const char *delim)</span></a><span> 分解字符串 </span><em><span>str</span></em><span> 为一组字符串，</span><em><span>delim</span></em><span> 为分隔符。</span></td></tr><tr><td style='text-align:left;' ><span>22</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strxfrm.html'><span>size_t strxfrm(char *dest, const char *src, size_t n)</span></a><span> 根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 </span><strong><span>src</span></strong><span> 的前 </span><strong><span>n</span></strong><span> 个字符，并把它们放置在字符串 </span><strong><span>dest</span></strong><span> 中。</span></td></tr></tbody></table></figure><p>&nbsp;</p><h3><a name="15timeh" class="md-header-anchor"></a><span>15、&lt;time.h&gt;</span></h3><h4><a name="简介-n4464" class="md-header-anchor"></a><span>简介</span></h4><p><strong><span>time.h</span></strong><span> 头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数。</span></p><h4><a name="库变量-n4466" class="md-header-anchor"></a><span>库变量</span></h4><p><span>下面是头文件 time.h 中定义的变量类型：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>变量 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>size_t</span></strong><span> 是无符号整数类型，它是 </span><strong><span>sizeof</span></strong><span> 关键字的结果。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>clock_t</span></strong><span> 这是一个适合存储处理器时间的类型。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><strong><span>time_t is</span></strong><span> 这是一个适合存储日历时间类型。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><strong><span>struct tm</span></strong><span> 这是一个用来保存时间和日期的结构。</span></td></tr></tbody></table></figure><p><span>tm 结构的定义如下：</span></p><pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 45px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 33px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre><div class="CodeMirror-linenumber CodeMirror-gutter-elt"><div>11</div></div></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -33px; width: 33px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 25px;">1</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">struct tm {</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">2</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_sec; &nbsp; &nbsp; &nbsp; &nbsp; /* 秒，范围从 0 到 59 &nbsp; &nbsp; &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">3</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_min; &nbsp; &nbsp; &nbsp; &nbsp; /* 分，范围从 0 到 59 &nbsp; &nbsp; &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">4</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_hour; &nbsp; &nbsp; &nbsp;  /* 小时，范围从 0 到 23 &nbsp; &nbsp; &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">5</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_mday; &nbsp; &nbsp; &nbsp;  /* 一月中的第几天，范围从 1 到 31 &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">6</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_mon; &nbsp; &nbsp; &nbsp; &nbsp; /* 月，范围从 0 到 11 &nbsp; &nbsp; &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">7</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_year; &nbsp; &nbsp; &nbsp;  /* 自 1900 年起的年数 &nbsp; &nbsp; &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">8</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_wday; &nbsp; &nbsp; &nbsp;  /* 一周中的第几天，范围从 0 到 6 &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt" style="left: 0px; width: 25px;">9</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_yday; &nbsp; &nbsp; &nbsp;  /* 一年中的第几天，范围从 0 到 365 &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 25px;">10</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; int tm_isdst; &nbsp; &nbsp; &nbsp; /* 夏令时 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  */</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -33px;"><div class="CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style="left: 0px; width: 25px;">11</div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">};</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 220px;"></div><div class="CodeMirror-gutters" style="height: 220px;"><div class="CodeMirror-gutter CodeMirror-linenumbers" style="width: 33px;"></div></div></div></div></pre><h4><a name="库宏-n4486" class="md-header-anchor"></a><span>库宏</span></h4><p><span>下面是头文件 time.h 中定义的宏：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>宏 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><strong><span>NULL</span></strong><span> 这个宏是一个空指针常量的值。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><strong><span>CLOCKS_PER_SEC</span></strong><span> 这个宏表示每秒的处理器时钟个数。</span></td></tr></tbody></table></figure><h4><a name="库函数-n4498" class="md-header-anchor"></a><span>库函数</span></h4><p><span>下面是头文件 time.h 中定义的函数：</span></p><figure><table><thead><tr><th style='text-align:left;' ><span>序号</span></th><th style='text-align:left;' ><span>函数 &amp; 描述</span></th></tr></thead><tbody><tr><td style='text-align:left;' ><span>1</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-asctime.html'><span>char *asctime(const struct tm *timeptr)</span></a><span> 返回一个指向字符串的指针，它代表了结构 timeptr 的日期和时间。</span></td></tr><tr><td style='text-align:left;' ><span>2</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-clock.html'><span>clock_t clock(void)</span></a><span> 返回程序执行起（一般为程序的开头），处理器时钟所使用的时间。</span></td></tr><tr><td style='text-align:left;' ><span>3</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-ctime.html'><span>char *ctime(const time_t *timer)</span></a><span> 返回一个表示当地时间的字符串，当地时间是基于参数 timer。</span></td></tr><tr><td style='text-align:left;' ><span>4</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-difftime.html'><span>double difftime(time_t time1, time_t time2)</span></a><span> 返回 time1 和 time2 之间相差的秒数 (time1-time2)。</span></td></tr><tr><td style='text-align:left;' ><span>5</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-gmtime.html'><span>struct tm *gmtime(const time_t *timer)</span></a><span> timer 的值被分解为 tm 结构，并用协调世界时（UTC）也被称为格林尼治标准时间（GMT）表示。</span></td></tr><tr><td style='text-align:left;' ><span>6</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-localtime.html'><span>struct tm *localtime(const time_t *timer)</span></a><span> timer 的值被分解为 tm 结构，并用本地时区表示。</span></td></tr><tr><td style='text-align:left;' ><span>7</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-mktime.html'><span>time_t mktime(struct tm *timeptr)</span></a><span> 把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。</span></td></tr><tr><td style='text-align:left;' ><span>8</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-strftime.html'><span>size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)</span></a><span> 根据 format 中定义的格式化规则，格式化结构 timeptr 表示的时间，并把它存储在 str 中。</span></td></tr><tr><td style='text-align:left;' ><span>9</span></td><td style='text-align:left;' ><a href='https://www.runoob.com/cprogramming/c-function-time.html'><span>time_t time(time_t *timer)</span></a><span> 计算当前日历时间，并把它编码成 time_t 格式。</span></td></tr></tbody></table></figure></div>
        </article>
        
        <!--右下角落款（开始）-->
        <div id="information">转自 <a href="https://www.runoob.com/">RUNOOB.com</a> &nbsp; 2020.2.7</div>
        <!--右下角落款（结束）--> 
    </div>
    <!--正文部分（结束）-->

    
    <!--页脚部分（开始）-->
    <!--还可以借鉴GitHub的页脚：两边写字，中间有图标-->
    <div class="ui inverted grey vertical four item footer segment">
        <div class="ui container">
            <div class="ui stackable inverted divided equal height stackable grid">
                <div class="three wide column">
                    <h4 class="ui inverted header">关 于</h4>
                    <div class="ui inverted link list">
                        <a class="item" href="https://github.com/">服务器支持：GitHub Pages</a>
                        <a class="item" href="https://semantic-ui.com/">样式支持：Semantic UI</a>
                        <a class="item" href="https://code.visualstudio.com/">开发软件：Visual Studio Code</a>
                        <a class="item" href="https://github.com/BitBitcode/BitBitcode.github.io">项目开源：GitHub</a>
                    </div>
                </div>
                <div class="three wide column">
                    <h4 class="ui inverted header">联系作者</h4>
                    <div class="ui inverted link list">
                        <a class="item">E-mail: smilewwc@qq.com</a>
                        <a class="item">Telephone：000000（示例）</a>
                        <a class="item">邮编：111111（示例）</a>
                        <a class="item">地址：中国-China</a>
                    </div>
                </div>
                <div class="seven wide column">
                    <h4 class="ui inverted header">版权信息</h4>
                    Semantic UI样式版权归原网站所有，请勿商用！<br>
                    Copyright ©2019~2020 BitBitcode.
                </div>
            </div>
        </div>
    </div>
    <!--页脚部分（结束）-->
</body>

</html>